import { ColDef, ICellRendererParams } from '@ag-grid-community/core'

/** columnDefs 配置项 */
export type TCol<T extends keyof IOrderListItem = keyof IOrderListItem> = ColDef<IOrderListItem, IOrderListItem[T]> & {
  field: T
}

/** cellRendererParams */
export type TCellParams<T extends keyof IOrderListItem = keyof IOrderListItem> = ICellRendererParams<
  IOrderListItem,
  IOrderListItem[T]
>

/** 运单列表请求入参 */
export interface IOrderListReq {
  /** 运单号(在接口调用时转成数组) */
  waybillNos: string | undefined
  /** FBAID */
  fbaId: string | undefined
  /** 预计签收时间-起始，YYYY-MM-DD */
  predictSignStart: string | undefined
  /** 预计签收时间-结束，YYYY-MM-DD */
  predictSignEnd: string | undefined
  /** 物流状态，0.待发货 1.报关中 2.运输中 3.清关中 4.中转中 5.派送中 6.已签收 7.已归档 8.异常 */
  logisticsStatus: number | undefined

  /**
   * 标签
   * - TMS: 1.超时未更新 2.新原始路由 3.异常
   * - OMS: 3.异常 4.待发送邮件
   * @deprecated 暂时不做
   */
  iconType: number[] | undefined

  /** 服务商 --- 仅TMS */
  merchantId: number | undefined
  /** 物流渠道 --- 仅TMS */
  channelId: number | undefined
  /** 柜号 --- 仅TMS */
  containerNumber: string | undefined
  /** 国家 --- 仅TMS */
  countryId: number | undefined
  /** 目的地 --- 仅TMS */
  destination: string | undefined

  /** 人员 业务跟单人员 --- 仅OMS */
  businessUserIds: number[] | undefined
  /** 客户 企业联系人 --- 仅OMS */
  enterpriseConnectorId: number | undefined
  /** DW(实际)-起始，YYYY-MM-DD --- 仅OMS */
  dwPredictSignTime: string | undefined

  page: number
  size: number
}

/** 运单列表请求响应项 */
export interface IOrderListItem {
  /** 唯一标识 */
  recordId: number

  /** 运单号 */
  waybillNo: string

  /** 标签，虚拟字段，用于列配置 */
  ['标签']?: null
  /** 超时未更新状态，1.亮色 2.灰色 */
  timeIconType: number
  /** 新原始路由，1.亮色 2.灰色 */
  readType: number
  /** 异常状态，1.亮色 2.灰色 */
  errorType: number
  /** 邮件状态，1.亮色 2.灰色 */
  emailType: number

  // === 日期分组 ===
  /** AGE */
  age: string | null
  /** 发货日期 */
  deliveryDate: string | null
  /** ETD（动态） */
  etd: string | null
  /** ETA（动态） */
  eta: string | null
  /** 预计签收日期 */
  predictSigningTime: string | null
  /** 实际签收日期 */
  practicalSigningTime: string | null

  // === 渠道分组 ===
  /** 服务商 */
  merchantServers: string | null
  /** 物流渠道 */
  logisticsChannel: string | null
  /** 渠道单号 */
  channelNo: string | null
  /** Carrier */
  carrier: string | null
  /** 转单号 */
  transferCodes: string[] | null
  /** 船名 */
  shipName: string | null
  /** 航次 */
  voyageNumber: string | null
  /** 柜号 */
  containerNumber: string | null
  /** 航班号 */
  flightNumber: string | null

  /** 物流状态，0.待发货 1.报关中 2.运输中 3.清关中 4.中转中 5.派送中 6.已签收 7.已归档 8.异常 */
  logisticsStatus: number | null

  /** 最新路由 */
  latestRoute: string | null

  /** 物流状态(英) */
  logisticsStatusEn: string | null
  /** 最新路由(英) */
  latestRouteEn: string | null

  // === 地址分组 ===
  /** 目的地 */
  destination: string | null
  /** 始发地（动态） */
  origin: string | null
  /** 起运港（动态） */
  originPort: string | null
  /** 起运机场（动态） */
  originAirport: string | null
  /** 目的机场（动态） */
  destinationAirport: string | null
  /** 国家 */
  countryId: number | null

  /** 客户 */
  customer: string | null

  /** 人员 */
  staffInfoList: Array<{
    /** 1.业务员 2.跟单员 */
    staffType: number
    user: IUser
  }> | null

  // === 亚马逊分组 ===
  /** FBAID */
  fbaId: string | null
  /** REID */
  reId: string | null
  /** DW(预计) 开始 */
  predictTimeStart: string | null
  /** DW(预计) 结束 */
  predictTimeEnd: string | null
  /** DW(实际) 开始 */
  practicalDeliveryTimeStart: string | null
  /** DW(实际) 结束 */
  practicalDeliveryTimeEnd: string | null
  /** Ship From 1.国际 2.本土 */
  shipFrom: 1 | 2 | null

  // === 产品分组 ===
  /** 品名 */
  boxes: Array<{
    /** 箱数 */
    boxNum: number
    /** 产品 */
    products: Array<{
      boxId: number
      /** 中文品名 */
      cname: string | null
      /** 英文品名 */
      ename: string | null
      /** SKU */
      sku: string | null
      /** FNSKU */
      fnsku: string | null
    }>
  }>
  /** 是否已创建物流订单 */
  createShippingOrderStatus: 0 | 1 | null
  /** 箱数  由 boxes[n].boxNum 累计 */
  $boxNum: number | null
}

/** 运单列表请求响应 */
export interface IOrderListRes {
  total: number
  records: IOrderListItem[]
}

/** 用户对象 */
export interface IUser {
  /** 用户id */
  id: number

  /** 启用 */
  active: boolean
  /** 账号  */
  username: string
  /** 角色ID  */
  roleId: number

  /** 用户名称 */
  name: string | null
  /** 用户英文名称 */
  englishName: string | null
  /** 用户头像地址 */
  avatar: string | null
  /** 手机号 */
  phone: string | null

  /** 部门ID  */
  departmentId: number | null
  /** 职位 */
  position: string | null
  /** 工号 */
  num: string | null

  loginDate: number
  createdDate: number
}
